import abc

import numpy as np


class Model(abc.ABC):

    def __init__(self):
        super().__init__()

        self._num_state = 0
        self._num_control = 0
        self._limit = np.array([])

    @staticmethod
    def numpy_derivatives(x: np.ndarray, u: np.ndarray):
        pass

    @staticmethod
    def casadi_derivatives(x: np.ndarray, u: np.ndarray):
        pass

    @property
    def num_state(self):
        return self._num_state

    @property
    def num_control(self):
        return self._num_control

    @property
    def limit(self):
        return self._limit
